


//===== 公共变量
var admin_user_name = 'a';		//统一超管名，用与后续操作中对超管的比对
var default_domain = 'http://a.newshop.top';	//默认请求域名
var default_requestPath = '/Zadmin/interface.php';
var default_storeRequestPath = '/Zstore/interface.php';
var upyun_shop_img = 'http://tp-shop-img.bm123.xyz';
//var upyun_shop_cache = 'http://tp-shop-cache.bm123.xyz';
var base_img = upyun_shop_img+'/base.jpg';
var imgRootDir = '/shop_img';




/*
	### 获取开能城市数据 (upyun)
		数据格式:{"openCity":[省数组（省包市，市包县）],'tag':xxx}
		示例：
		_getOpenCityFromUpyun(function(res){
			if(!/^{.*}$/.test(res)){
				location.href = '../error.html?t=400004';
				//location.replace('../error.html?t=400004');
				err
			}
			var openCity = JSON.parse(res).openCity;
			_parseOpenCity(openCity,CityChange_Province,CityChange_City,CityChange_County,function(){
				//点击切换按钮 
				CityChange_ChangeBtn.onclick = function(){
					var CountyInfo = CityChange_County.options[CityChange_County.selectedIndex].value;
					C(CountyInfo);
					localStorage.store_currentSelectCountyInfo = CountyInfo;
					C(sessionStorage.store_currentSelectCountyInfo);

					//location.replace('login.html');
					location.href= 'login.html';
					//location.replace('main.html');
				}
			})
		});


*/
// function _getOpenCityFromUpyun(fun){
// 	Ajax({},function(res){
// 		C('openCityInfo from upyun');
// 		if(fun){
// 			fun(res);
// 		}
// 	},upyun_shop_img + '/cache/openCity',0,1);
// }





/*
	### 加载域名列表(upyun)
	示例：
	_getDomainListFromUpyun(function(res){
		//随机一个域名
		_loopAndSelectDomain(JSON.parse(res),function(url){
			if(!/^http:.*$/.test(url)){
				location.href='../error.html?t=40001';
				re
			}
			sessionStorage.admin_requestAddr = url + '/Zadmin/interface.php';	//缓存请求地址
			location.href = 'login.html';
		})
	});
*/
// function _getDomainListFromUpyun(fun){
// 	Ajax({},function(res){
// 		C('domainList from upyun');
// 		if(fun){
// 			fun(res);
// 		}
// 	},upyun_shop_img + '/cache/domainList',0,1);
// }


/*
	### 从域名列表中随机选取域名
	注：参数list数据格式必须如下：
		Array ["http.xxx.top",......]
	返回：随机成功返回一个域名 ，失败返回false
*/
// function _loopAndSelectDomain(list,fun){
// 	if(typeof(list) !='object' || list.length < 1){
// 		fun(false);return;
// 	}
// 	var index = Math.floor(Math.random()*list.length);
// 	var domainp = decodeURIComponent(list.splice(index,1));
//  	var domain = domainp + '/ping.php';
// 	Ajax({},function(res2){
// 		if(res2 == 'false'){
// 			_loopAndSelectDomain(list,fun);
// 		}else{
// 			fun(domainp);
// 		}
// 	},domain,0,1,500);
// }





//随机一个域名
function randomDomain(domainListTmp) {
	var tmpDomain = decodeURIComponent(domainListTmp.splice(Math.floor(domainListTmp.length * Math.random()), 1));
	var tmpUrl = tmpDomain + '/ping.php';
	Ajax({}, function (res) {
		if (res == 'false') {
			C(tmpUrl + ' is bad!');
			randomDomain(domainListTmp);
		} else if (res == 'ok') {
			C(tmpUrl + ' is ok!');
			sessionStorage.currentDomain = tmpDomain;
		}
	}, tmpUrl, 0, 'get', 1000);

}



//获取域名列表(local - upyun)
function _getDomainList(fun,v){
	if(localStorage.domainList && /^{.*}$/.test(localStorage.domainList)){
		C(localStorage.domainList);
		if(v)C('1：domainList have local！');
		var domainList = JSON.parse(localStorage.domainList);
		if(domainList.time + 5000 < new Date().getTime()){
			if(v)C('3：domainList 过期！');
			Ajax({},function(tag){
				if(tag != domainList.tag){	//版本不一致就更新全部数据
					C('4：domainList 版本不一致！');
					_upyun(function(){
						if(fun){
							fun(domainList);
						}
					});
				}else{						//版本一致就更新时间
					C('4：domainList 版本一致！');
					domainList.time = new Date().getTime();
					localStorage.domainList = JSON.stringify(domainList);
					if(fun){
						fun(domainList);
					}
				}
			},upyun_shop_img + '/cache/domainListTag',0,1);
		}else{
			if(v)C('3：domainList 未过期！');
		}
	}else{
		if(v)C('1：domainList no have local！');
		_upyun(fun);
	}

	function _upyun(fun){
		C('2：domainList from upyun');
		Ajax({},function(res){
			if(/^{"domainList.*}$/.test(res)){
				var domainList = JSON.parse(res);
				domainList.time = new Date().getTime();;
				localStorage.domainList = JSON.stringify(domainList);
				if(fun){
					fun(domainList);
				}
			}else{
				//数据格式不正确
				location.href='../error.html?t=30001';
				err
			}
		},upyun_shop_img + '/cache/domainList',0,1);
	}
}



//获取已开通城市列表(local - upyun)
function _getCityList(fun,v){
	if(localStorage.openCity && /^{.*}$/.test(localStorage.openCity)){
		if(v)C('1：openCity from local');
		var openCity = JSON.parse(localStorage.openCity);
		if(openCity.time + 5000 < new Date().getTime()){
			if(v)C('2：openCity 数据过期！');
			Ajax({},function(tag){
				if(openCity.tag == tag){
					if(v)C('3：openCity 版本一致！');
					openCity.time = new Date().getTime();
					localStorage.openCity = JSON.stringify(openCity);
					if(fun){
						fun(openCity);
					}
				}else{
					if(v)C('3：openCity 版本不一致！');
					if(v)C('4：openCity from upyun');
					_upyun(function(res){
						if(fun){
							fun(openCity);
						}
					});
				}
			},upyun_shop_img + '/cache/openCityTag',0,1);
		}else{
			if(v)C('2：openCity 数据未过期！');
			if(fun){
				fun(openCity);
			}	
		}
	}else{
		if(v)C('1：openCity from upyun');
		//获取开通城市
		_upyun(function(res){
			if(fun){
				fun(res);
			}
		});
	}

	function _upyun(fun){
		Ajax({},function(res){
			if(!/^{.*}$/.test(res)){
				location.href = '../error.html?t=30002';	//暂无开通城市！
				err
			}
			var openCity = JSON.parse(res);
			openCity.time = new Date().getTime();
			localStorage.openCity = JSON.stringify(openCity);	//缓存开通城市
			if(fun){
				fun(openCity);
			}
		},upyun_shop_img + '/cache/openCity',0,1);
	}
}





// function _getDomainList(fun){
// 	//后台
// 	if(localStorage.domainList){
// 		C('getDomainList local');
// 		var domainList = JSON.parse(localStorage.domainList);
// 		fun(domainList);
// 	}else{
// 		Ajax({type:'_getDomainList'},function(after){
// 			C('getDomainList after');
// 			if(/^\[.*\]$/.test(after)){
// 				localStorage.domainList = after;
// 				var domainList = JSON.parse(after);
// 				fun(domainList);
// 			}else{
// 				location.replace('../error.html?t=400003');
// 			}
// 		},default_requestAddr);
// 	}
// }








//===== 后台管理专用函数


/*
	### 检测ip地址的格式是否正确
	参一：ip   要检测的内容
	return 	合法ip返回true ,非法返回false
*/
function ChacekIpFormart(ip){
	if(/^(([0-9])|([1-9][0-9])|([1][0-9]{2})|([2][0-5][0-5]))[.](([0-9])|([1-9][0-9])|([1][0-9]{2})|([2][0-5][0-5]))[.](([0-9])|([1-9][0-9])|([1][0-9]{2})|([2][0-5][0-5]))[.](([0-9])|([1-9][0-9])|([1][0-9]{2})|([2][0-5][0-5]))$/.test(ip)){
		return true;
	}else{
		return false;
	}
}



/*
	### 后台管理的获取城市信息
	回调：返回对象方式的城市数据
	示例：
		getCityInfoFull(function(cityList){
			//解析城市到下拉框
			City_ParseCity(cityList,GetOpenType(),MainCounty_Province,MainCounty_City,MainCounty_County,function(){

				MainCounty_ViewDbInfoForCounty(MainCounty_County,MainCounty_DbHost,MainCounty_DbName);	//解析库址

				$('#MainCounty_CityOpenStat').change(function(){	//状态切换
					sessionStorage.citySelectVal = GetOpenType();
					location.reload();
				});
			});
		});
*/
function getCityInfoFull(fun){
	var data = {
		type:'getCityInfoFull'
	};
	AjaxAdmin(data,function(res){
		var tmp = _checkJsonFormat(res);
		fun(tmp.data);
	});
}




/*
	### 解析城市数据到元素
	参一：object         城市全部数据对象
	参二：object         已开通城市数据对象
	参三：int            返回城市数据类型，1：全部，2：已开通，3：未开通
	参四：object 	     省select对象
	参五：object 	     市select对象
	参六：object 	     县select对象
	参七：function       完成后的回调
	示例：
		City_ParseCity(CityFull,CityOpen,GetOpenType(),MainCounty_Province,MainCounty_City,MainCounty_County,function(){
							MainCounty_ViewDbInfoForCounty();
						});
*/
function City_ParseCity(CityInfo,stat,ele_province,ele_city,ele_county,fun){
	ele_county.innerHTML = '';
	ele_province.innerHTML='';
	ele_city.innerHTML = '';

	var Province_Arr = [];
	var City_Arr = [];
	var County_Arr = [];	//用来装载省市县分类后的城市数据

	var Province_Arr2 = new Array();	
	var City_Arr2 = new Array();
	var County_Arr2 = new Array();	//用来装载筛选后的城市数据
	LoadCityInfo();
  	function LoadCityInfo(){
  		var City_ids = [];
		for(var i=0;i<CityInfo.length;i++){
			//过滤掉港奥台
			if(CityInfo[i].level == 0){
				if(CityInfo[i].code == 710000 || CityInfo[i].code == 810000 || CityInfo[i].code == 820000){
					continue;
				}
			}
			if(CityInfo[i].level == 0){			//归集省数据
				Province_Arr2.push(CityInfo[i]);
			}
			if(CityInfo[i].level == 1){			//归集市数据
				City_Arr2.push(CityInfo[i]);
			}
			if(CityInfo[i].level == 2){			//归集县数据
				if(stat == 2){	//已开通城市
					if(CityInfo[i].db_host && CityInfo[i].db_name){
						County_Arr.push(CityInfo[i]);
						if(City_ids.indexOf(parseInt(CityInfo[i].parent_id)) < 0){
							City_ids.push(parseInt(CityInfo[i].parent_id));
						}
					}
				}else if(stat == 3){	//未开通城市
					if(!CityInfo[i].db_host || !CityInfo[i].db_name){
						County_Arr.push(CityInfo[i]);
						if(City_ids.indexOf(parseInt(CityInfo[i].parent_id)) < 0){
							City_ids.push(parseInt(CityInfo[i].parent_id));
						}
					}
				}else if(stat == 1){	//全部
					County_Arr.push(CityInfo[i]);
					if(City_ids.indexOf(parseInt(CityInfo[i].parent_id)) < 0){
						City_ids.push(parseInt(CityInfo[i].parent_id));
					}
				}
				
			}
		}

		//筛选市数据
		var province_ids = [];
		for(var i=0;i<City_Arr2.length;i++){
			for(var j=0;j<City_ids.length;j++){
				if(parseInt(City_ids[j]) == parseInt(City_Arr2[i].id)){
					City_Arr.push(City_Arr2[i]);
					if(province_ids.indexOf(parseInt(City_Arr2[i].parent_id)) < 0){
						province_ids.push(parseInt(City_Arr2[i].parent_id));
					}
				}
			}
		}


		//筛选省数据
		for(var i=0;i<Province_Arr2.length;i++){
			for(var j=0;j<province_ids.length;j++){
				if(parseInt(province_ids[j]) == parseInt(Province_Arr2[i].id)){
					Province_Arr.push(Province_Arr2[i]);
				}
			}
		}
		if(County_Arr.length > 0){
			PushProvince(); //填充省市县数据
		}
  	}

 	//填充省数据
	function PushProvince(){
		ele_province.innerHTML = ''
		var Province_Str = '';

		for(var i=0;i<Province_Arr.length;i++){
			Province_Str += "<option value="+Province_Arr[i].id+">"+Province_Arr[i].name+"</option>";
		}
		ele_province.innerHTML=Province_Str;
		PushCity();		//直充市数据
	}
	//填充市数据
	function PushCity(){
		ele_city.innerHTML = '';
		var Province_Id = ele_province.options[ele_province.selectedIndex].value;
		var City_Str = '';
		for(var i=0;i<City_Arr.length;i++){
			if(City_Arr[i].parent_id == Province_Id){
				City_Str += "<option value="+City_Arr[i].id+">"+City_Arr[i].name+"</option>";
			}
		}
		ele_city.innerHTML = City_Str;
		PushCounty();	//填充县数据
	}
	//填充县数据
	function PushCounty(){
		ele_county.innerHTML = '';
		var City_Id = ele_city.options[ele_city.selectedIndex].value;
		var County_Str = '';
		for(var i=0;i<County_Arr.length;i++){
			if(County_Arr[i].parent_id == City_Id){
				County_Str += "<option value="+County_Arr[i].code+","+County_Arr[i].db_host+","+County_Arr[i].db_name+">"+County_Arr[i].name+"-"+County_Arr[i].code+"</option>";
			}
		}
		ele_county.innerHTML = County_Str;
		if(fun){
			fun();
		}
	}
	//省的切换事件
	ele_province.onchange = function(){
		PushCity(); 	//直充市数据
	}
	//市的切换事件
	ele_city.onchange = function(){
		PushCounty(); 	//直充市数据
	}
	//县的切换
	ele_county.onchange = function(){
		if(fun){
			fun();
		}
	}
}





/*
	### 解析并显示库址和库名
	参一：object         县select元素id对象
	参二：object         库址input元素id对象
	参三：object         库名input元素id对象
*/
function MainCounty_ViewDbInfoForCounty(MainCounty_County,MainCounty_DbHost,MainCounty_DbName){
	//先清空库址库名input
	MainCounty_DbHost.value = '';
	MainCounty_DbName.value = '';
	var MainCountry_CountVal = MainCounty_County.options[MainCounty_County.selectedIndex].value;	//获取县级信息 
	var MainCountry_CountValArr = MainCountry_CountVal.split(',');
	if(!MainCountry_CountValArr[1]){
		return;
	}
	if(MainCountry_CountValArr.length < 2){
		return;
	}
	var data = {			//解析指定ip码
		type:'DecryptIp',
		ip:MainCountry_CountValArr[1]
	};
	AjaxAdmin(data,function(res){
		if(res && res != 'err'){
			MainCounty_DbHost.value = res;		//显示库址
			sessionStorage.MainCounty_DbHost = res;	//缓存库址
		}
	},sessionStorage.admin_requestAddr);
	MainCounty_DbName.value = MainCountry_CountValArr[2];		//显示库名
	sessionStorage.MainCounty_DbName = MainCountry_CountValArr[2];	//缓存库名
}










/*
	### 获取缓存的后台管理用户信息
	有：返回用户信息
	无：跳转到初始页
*/
function _getAdminUserInfo(){
	if(!sessionStorage.admin_user_info || !/^{.*}$/.test(sessionStorage.admin_user_info)){
		A('缺少登陆用户信息！');
		location.replace('index.html');aa
	}
	return JSON.parse(sessionStorage.admin_user_info);
}


/*
	### 加载域名列表全信息(超管)
*/
function _getDomainListFull(fun){
	//后台
	AjaxAdmin({type:'_getDomainListFull'},function(after){
		C(after);
		fun(after);
	});
}




















//====== 公共函数


/*
	### 指定DOM元素全部图片懒加载方式(适用图片不多的情况)
	参一：指定的元素id名
	参二：默认获取srcs属性，可另行指定
	示例：
		Img_Later_View3('#Collect_List1');
*/
function Img_Later_View3(ele,srcs){
	if(!srcs){
		var srcs = 'srcs';
	}
	$(ele).find('img').each(function(i,o){
		if($(o).attr('srcs')){
			$(o).attr('src',$(o).attr(srcs));
		}
	});
}



/*
	### 获取登陆后当前选择的城市的缓存信息
	返回的数组 如： [ "110101", "404166680", "aa", "东城区" ]

*/ 
function _getCurrentCityInfo(){
	if(sessionStorage.admin_currentSelectCountyInfo){
		return sessionStorage.admin_currentSelectCountyInfo.split(',');
	}else{
		return '';
	}
}







/*
	### 解析已开通城市到下拉列表(非管理)
	参一：省市县的组合数据 如：{ Province_Arr: Array[1], City_Arr: Array[1], County_Arr: Array[4] }
	参二：省下拉框的id
	参三：市下拉框的id
	参四：县下拉框的id
	参五：切换按钮的id
	示例：
		<select id="CityChange_Province"></select>
		<select id="CityChange_City"></select>
		<select id="CityChange_County"></select>
		<button id='CityChange_ChangeBtn'>切换</button>

		_parseOpenCityInfo(cityList,CityChange_Province,CityChange_City,CityChange_County,CityChange_ChangeBtn,function(CountyInfo){
			sessionStorage.admin_currentSelectCountyInfo = CountyInfo;
			location.replace('main.html');
		});
*/
// function _parseOpenCityInfo(cityList,ele_province,ele_city,ele_county,changeBtnStr,fun){
// 	PushProvince(cityList,CityChange_Province,CityChange_City,CityChange_County);
//  	//填充省数据
// 	function PushProvince(cityList,ele_province,ele_city,ele_county){
// 		ele_province.innerHTML = ''
// 		var Province_Str = '';

// 		for(var i=0;i<cityList.Province_Arr.length;i++){
// 			Province_Str += "<option value="+cityList.Province_Arr[i].id+">"+cityList.Province_Arr[i].name+"</option>";
// 		}
// 		ele_province.innerHTML=Province_Str;
// 		PushCity(cityList,ele_province,ele_city,ele_county);		//直充市数据
// 	}
// 	//填充市数据
// 	function PushCity(cityList,ele_province,ele_city,ele_county){
// 		ele_city.innerHTML = '';
// 		var Province_Id = ele_province.options[ele_province.selectedIndex].value;
// 		var City_Str = '';
// 		for(var i=0;i<cityList.City_Arr.length;i++){
// 			if(cityList.City_Arr[i].parent_id == Province_Id){
// 				City_Str += "<option value="+cityList.City_Arr[i].id+">"+cityList.City_Arr[i].name+"</option>";
// 			}
// 		}
// 		ele_city.innerHTML = City_Str;
// 		PushCounty(cityList,ele_province,ele_city,ele_county);	//填充县数据
// 	}
// 	//填充县数据
// 	function PushCounty(cityList,ele_province,ele_city,ele_county){
// 		ele_county.innerHTML = '';
// 		var City_Id = ele_city.options[ele_city.selectedIndex].value;
// 		var County_Str = '';
// 		for(var i=0;i<cityList.County_Arr.length;i++){
// 			if(cityList.County_Arr[i].parent_id == City_Id){
// 				County_Str += "<option value="+cityList.County_Arr[i].code+","+cityList.County_Arr[i].db_host+","+cityList.County_Arr[i].db_name+","+cityList.County_Arr[i].name+">"+cityList.County_Arr[i].name+"</option>";
// 			}
// 		}
// 		ele_county.innerHTML = County_Str;

// 	}
// 	//省的切换事件
// 	ele_province.onchange = function(){
// 		PushCity(cityList,ele_province,ele_city,ele_county); 	//直充市数据
// 	}
// 	//市的切换事件
// 	ele_city.onchange = function(){
// 		PushCounty(cityList,ele_province,ele_city,ele_county); 	//直充市数据
// 	}

// 	//点击切换按钮 
// 	changeBtnStr.onclick = function(){
// 		var CountyInfo = CityChange_County.options[CityChange_County.selectedIndex].value;
// 		fun(CountyInfo);
// 		//location.replace('main.html');
// 	}
// }

function _parseOpenCity(openCity,ele_province,ele_city,ele_county,fun){
	PushProvince(openCity,ele_province,ele_city,ele_county,fun);
 	//填充省数据
	function PushProvince(openCity,ele_province,ele_city,ele_county,fun){
		ele_province.innerHTML = ''
		var Province_Str = '';

		for(var i=0;i<openCity.length;i++){
			Province_Str += "<option value="+openCity[i].id+">"+openCity[i].name+"</option>";
		}
		ele_province.innerHTML=Province_Str;

		PushCity(openCity,ele_province,ele_city,ele_county,fun);		//直充市数据
		ele_province.onchange = function(){
			PushCity(openCity,ele_province,ele_city,ele_county,fun); 	//直充市数据
		}
	}

	//填充市数据
	function PushCity(cityList,ele_province,ele_city,ele_county,fun){
		var province_index = $(ele_province).find('option:selected').index();
		ele_city.innerHTML = '';
		var City_Str = '';
		for(var i=0;i<cityList[province_index].city.length;i++){
			City_Str += "<option value="+cityList[province_index].city[i].id+">"+cityList[province_index].city[i].name+"</option>";
		}
		ele_city.innerHTML = City_Str;
		PushCounty(cityList,ele_province,ele_city,ele_county,fun);	//填充县数据
		ele_city.onchange = function(){
			PushCounty(cityList,ele_province,ele_city,ele_county,fun);	//填充县数据
		}
	}

	//填充县数据
	function PushCounty(cityList,ele_province,ele_city,ele_county,fun){
		var province_index = $(ele_province).find('option:selected').index();
		var city_index = $(ele_city).find('option:selected').index();
		ele_county.innerHTML = '';
		var County_Str = '';
		for(var i=0;i<cityList[province_index].city[city_index].county.length;i++){
			//C(cityList[province_index].city[city_index].county[i]);
			County_Str += "<option value="+cityList[province_index].city[city_index].county[i].code+","+cityList[province_index].city[city_index].county[i].db_host+","+cityList[province_index].city[city_index].county[i].db_name+"," +cityList[province_index].city[city_index].county[i].name+ ">"+cityList[province_index].city[city_index].county[i].name+"-"+cityList[province_index].city[city_index].county[i].code+"</option>";
		}
		ele_county.innerHTML = County_Str;
		if(fun){
			fun();
		}
	}

}







/*
	### 检测JSON数据格式必需是{...}
	参二：type 
			false 默认，后台管理使用
			true : 商户管理使用

*/
function _checkJsonFormat(res,type){
	if(res == '10001'){
		A('缺少用户名或异常');
		location.replace('login.html');
		return;
	}
	if(res == '10002'){
		A('token验证失败！');
		location.replace('login.html');
		return;
	}
	if(res == '10003'){
		A('验证码不正确！');
		return;
	}
	if(res == '10004'){
		A('缺少库址或库名');
		return;
	}
	if(res == '10005'){
		A('商户状态非正常！');
		return;
	}
	if(!/^{.*}$/.test(res)){
		A('数据异常！');
		return;
	}
	var tmp = JSON.parse(res);
	if(type){	//商户管理
		sessionStorage.store_token1 = tmp.token1;
	}else{		//后台管理
		sessionStorage.admin_token1 = tmp.token1;
	}
	if(tmp.stat == 'err1'){
		A('缺少必要的参数！');exit
	}
	return tmp;
}








/*
	### 获取已开通城市数据(非超管)
	type (bool) 请求类型：false为后台 ，true为商户
	返回数据其中城市数据格式为 
		$data = array(
			'Province_Arr'=>$Province_Arr,
			'City_Arr'=>$City_Arr,
			'County_Arr'=>$County_Arr
		);
*/
// function _getOpenCityInfo(fun){
// 	// if(localStorage.cityList){
// 	// 	C('cityList local');
// 	// 	fun(localStorage.cityList);
// 	// }else{
// 	// }
// 		C('cityList after');
// 		var data = {
// 			type:'_getOpenCityInfo'
// 		};
// 		Ajax(data,function(res){
// 			if(!/^{.*}$/.test(res)){
// 				location.href = '../error.html?t=400004';
// 				//location.replace('../error.html?t=400004');
// 				err
// 			}else{
// 				localStorage.cityList = res;
// 			}
// 			fun(localStorage.cityList);
// 		},default_requestAddr);
// }
















/*
	###   ajax 异步加载 (JQUERY方式)
	参一：要传送的数据
	参二：成功回调
	参三：请求的后台地址.默认无值为前端后台地址，>0 为后台地址，有值且非int为当前参数地址
	参四：是否异步.当无值时默认为异步，当有值时为同步
	参五：提交方式 默认为post,有值为get
	参六：过期时间，默认为3秒
	示例：
		var data = {
					token:t,
					type:type,
					openid:openid
				};

		 Ajax(data,function(res){
		 	alert(res);
		 });
		 或
		 },1);
*/
function Ajax(data,fun,url,async,stat,timeout){
	if(!stat){
		stat = 'post';
	}else{
		stat = 'get';
	}
	async = async?false:true;
	if(!url){
		A('缺少URL');exit
	}
	if(!timeout){
		var timeout = 1000;
	}
	var ajaxBody = $.ajax({
		url:url,
		type:stat,
		async:async,
		data:data,
		timeout:timeout,
		success:function(rq_res,rq_stat,rq_xhr){
			fun(rq_res,rq_stat,rq_xhr);
		},
		error:function(){
			//ajaxBody.abort();
			fun('false');
		}
	});
}


/*
	### ajax上传文件
	示例：
		var formData = new FormData();
		formData.append('type','storeRegister'); 
		AjaxFile(formData,function(res){
			C(res);
		},requestAddr)
*/
function AjaxFile(data,fun,url){
	$.ajax({
	    url:url,
	    type: 'POST',
	    data:data,
	    processData: false,
	    contentType: false,
	    success : function(res) {
	  		fun(res);
	    },
	    error:function(){
			fun('false');
	    }
	});
	
}





//管理后台专用
function AjaxAdmin(data,fun){
	var cityInfo = _getCurrentCityInfo();
	if(typeof(cityInfo=='object' && cityInfo.length >= 4)){
		data.cityCode = cityInfo[0];
		data.db_host = cityInfo[1];
		data.db_name = cityInfo[2];
	}
	if(!data.user){
		data.user = _getAdminUserInfo().name;
	}
	data.token1 = sessionStorage.admin_token1;
	Ajax(data,function(res){
	 	fun(res);
	},sessionStorage.admin_requestAddr,1);
}

//商户专用
function AjaxStore(data,fun){
	var cityInfo = _store_getCurrentCityInfo();
	if(typeof(cityInfo=='object' && cityInfo.length >= 4)){
		data.cityCode = cityInfo[0];
		data.db_host = cityInfo[1];
		data.db_name = cityInfo[2];
	}
	if(!data.user){
		data.user = _store_getStoreAccountInfo().account;
	}
	data.token1 = sessionStorage.store_token1;
	Ajax(data,function(res){
	 	fun(res);
	},_store_getServerAddr(),1);
}





/*
	### 检测字段
	示例：
		Field_Check(/^.{3,20}$/,StoreMainEdit_Name,'js商户名长度为3-20个字符!');
*/
function Field_Check(p,str,notice){
	if(!p.test(str)){
		A(notice);exits
	}
}





/*
	### 检测并替换字串中的特殊字符为实体字符 (' , " , > , < , / , \)
	### 参一：源字串 
	### 参二：是否反解析,及分割特殊字符与数值
				空 为特殊字符转实体  默认
				1  为实体转字符
				1+ 将实体字符与数值的分割。如 &#392143 会产生乱码，分割为 &#39 2143
	### return : 返回替换后的字串
	### 示例：
		var content = $('textarea[name=content]').val().trim();
		content = ChangeChar(content);
		或
		ChangeChar(obj.info_title,1)
*/
function ChangeChar(val,stat){
	if(stat){
		if(stat > 1){
			if(/&#[0-9]{2,}/.test(val)){
				var p2 = /([^&#]*)(&#[0-9]{2})([0-9].*)/g;
				var val =  val.replace(p2,"$1$2 $3");
			}
			return val;
		}

		var p2 = /&#60/g;
		val = val.replace(p2,"<");
		var p2 = /&#62/g;
		val = val.replace(p2,">");
		var p2 = /&#39/g;
		val = val.replace(p2,"'");
		var p2 = /&#34/g;
		val = val.replace(p2,'"');
		var p2 = /&#47/g;
		val = val.replace(p2,"\/");
		var p2 = /&#92/g;
		val = val.replace(p2,"\\");
		var p2 = /&#59/g;
		val = val.replace(p2,";");
		var p2 = /&#40/g;
		val = val.replace(p2,"(");
		var p2 = /&#41/g;
		val = val.replace(p2,")");
		//var p2 = /&nbsp/g;
		//val = val.replace(p2," ");
		return val;
	}else{
		var p2 = /</g;
		val = val.replace(p2,"&#60");
		var p2 = />/g;
		val = val.replace(p2,"&#62");
		var p2 = /\'/g;
		val = val.replace(p2,"&#39");
		var p2 = /\"/g;
		val = val.replace(p2,"&#34");
		var p2 = /\//g;
		val = val.replace(p2,"&#47");
		var p2 = /\\/g;
		val = val.replace(p2,"&#92");
		var p2 = /;/g;
		val = val.replace(p2,"&#59");
		var p2 = /\(/g;
		val = val.replace(p2,"&#40");
		var p2 = /\)/g;
		val = val.replace(p2,"&#41");
		//var p2 = / /g;
		//val = val.replace(p2,"&nbsp");
		return val;
	}
}



/*
	### 检测确认
	示例：
		if(!_confirm()){
			return;
		}
*/
function _confirm(){
	if(!confirm('确认该操作？')){
		return false;
	}
	var vcode = Math.round(Math.random()*10000);
	if(vcode != prompt('请输入确认码：'+vcode)){
	        A('确认码不正确！');
	        return false;
	}
	return true;
}











/*
    ### 无限分页最新(无总页，效率分页*推荐*)
        参一：当前页
        参二：允许显示最大页码
        参三：成功的回调函数
        参四：>> 后翻的最大页码 (对应后台 $max_page)
        参五：当前页前后各显示的页数
		参六：指定要填充的元素id
        需要一个id为 fpage 的容器元素 如 <div style="text-align:center;margin:20px" id="fpage"> </div>
        示例：

	if(typeof(info) != 'object' || info.length < 1){
		if(sessionStorage.pnow == 1){	//首页就没数据则显示，暂无数据
			$('#MainFreeGoods_GoodsList').html('暂无数据！');
		}else{ 	//后页无数据
			sessionStorage.pnow = sessionStorage.pnow - 1;
			sessionStorage.pMax = sessionStorage.pnow;
		}
	}else{
		......
	}

	var pnum = Math.ceil(info.length/controFree_psize);	//计算最大页
	if(controFree_pnow >= pnum){
		controFree_pnow = pnum;
		controFree_pMax = pnum;	
	}

	Fpage(controFree_pnow,controFree_pMax,function(p){
		controFree_pnow = p;
		controFree_pMax = p + 1;
		_controFreeInit();
	},1,1,'#FreeCon_Fpage')
	
*/
function Fpage(PageNo,max_page,fun,step,loop,ele) {
	if(!loop){
		loop=2;
	}
	if(!step){
		step=6;
	}
	PageNo = parseInt(PageNo);
    var start = PageNo - loop;
    if (start < 1) {
        start = 1;
    }
    var end = PageNo + loop;
    if(end > max_page){
    	end = max_page;
    }
    var fpage_str = '';
	if(PageNo > (loop+1)){
		fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo='1' >首页</a>";
	}
    for (var i = start; i <= end; i++) {

        if (PageNo == i) {
            fpage_str += "<a style='margin:5px;border:1px solid blue;padding:3px 5px;color:#fff;background:blue' PageNo=" + i + ">" + i + "</a>";
        } else {
            fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo=" + i + ">" + i + "</a>";
        }
    }
    var next = PageNo + step;
    if(next >= max_page){
    	next = max_page
    }
    //console.log(max_page);
	if(PageNo < max_page){
		fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo="+next+" >>></a>";
	}
	if(!ele){
		ele = '#fpage';
	}
	$(ele).html(fpage_str);
    $(ele+" a").click(function () {
    	if(PageNo == $(this).attr('PageNo')){
    		return;
    	}
        PageNo = $(this).attr('PageNo');
        fun(PageNo);
    });
}





/*
	### 检测文件是否合法(大小，后缀) 
		参一：文件对象(必选)
		参二：文件大小(可选，默认500Kb)
		参三：文件后缀(可选，默认jpg,png,gif)
		return: 
			e1	文件类型不正确（参三使用默认时会检测文件类型)
			e2	文件大小超限
			e3	文件后缀不合法
			true 	通过检测返回true
		示例：
			img_select.onchange=function(){
				var file = img_select.files[0];
				alert(CheckFile(file,50000,['txt','zip']));
			}
*/
function CheckFile(file,size,file_exts){
	if(!size){
		var size = 500000;
	}
	if(!file_exts){
		var file_types = ['image/gif','image/jpeg','image/png'];	//文件类型过滤
		var file_exts = ['gif','GIF','jpeg','JPEG','jpg','JPG','png','PNG'];	//文件后缀过滤
		if(file_types.indexOf(file.type) < 0){
			return 'e1';
		}
	}
	if(file.size > size){
		return 'e2';
	}
	var ext = file.name.substring(file.name.lastIndexOf('.')+1);
	if(file_exts.indexOf(ext) < 0){
		return 'e3';
	}
	return true;
}







/*
	### 将时间戳转换成 年月日格式的字串 
	### 参一：stamp js时间戳 
		参二：stat无值反回年月日，有值返回年月日时分秒,有值且为2时返回时分秒
	### return : 返回年月日格式的字串
	### 示例：
		var t2 = StampToYmd(server_time);	//2018-5-15
*/
function StampToYmd(stamp,stat){
	var t = new Date(stamp);
	//计算年月日
	var t2 = t.getFullYear()+"-"+(t.getMonth()>=9?t.getMonth()+1:'0'+(t.getMonth()+1))+"-"+(t.getDate()>=10?t.getDate():'0'+t.getDate());
	if(stat){
		//计算时分秒
		var t3 = (t.getHours()>=10?t.getHours():'0'+t.getHours())+':'+(t.getMinutes()>=10?t.getMinutes():'0'+t.getMinutes())+':'+(t.getMinutes()>=10?t.getMinutes():'0'+t.getMinutes());
		if(stat == 2){
			return t3;	//返回时分秒
		}
		return  t2+' '+t3;	//返回年月，时分秒
	}else{
		return t2;	//返回年月日
	}
}





/*
	### 蒙板提示框(提示时页面被盖不可操作)
	### 参一：提示内容
	### 需要：函数需要一个 id='notice' 的元素做容器
	### 示例：
		 <div id='Notice'></div>
		 Notice('信息发布成功！'); //开启提示框
		 Notice();	//关闭提示框
*/
var Notice_deg = 1;
var Notice_rotate;
function Notice(text){
	if(text){
		var str = "<div class='sca_Notice' style='z-index:100;position:fixed;top:0px;width:100%;height:100%;background:rgba(255,100,100,0.5)'><div id='notice_text' style='background:#fff;width:200px;margin:20% auto;text-align:center;padding:30px;border-radius:10px'><div class='sca_Notice_img' style='padding:10px;border-top:1px solid #bbb;border-right:1px solid #999;border-bottom:1px solid #666;display:inline-block;border-radius:25px'></div><div>"+text+"</div></div></div>";
		$('body').append(str);
		Notice_rotate = setInterval(function(){
			$(".sca_Notice_img").css({'transform':'rotate('+Notice_deg+'deg)'});
			Notice_deg +=25;
		},100)
	}else{
		//$('.sca_Notice').html('');
		$('.sca_Notice').remove();
		clearInterval(Notice_rotate);
	}
}






function C(res){
	console.log(res);
}

function A(res){
	alert(res);
}

































































































// /*
// 	### 点击切换验证码
// 	参一：图片元素对象
// 	参二：图片切换的时间延迟
// 	示例：
// 		<img src="xx.php?type=code" onclick='ChangeCode(this,2000)'>

// */
// function ChangeCode(o,time){
// 	if(!time){
// 		var time = 1000;	
// 	}
// 	if(parseInt(sessionStorage.code_time)+time > new Date().getTime()){
// 		return;
// 	}
// 	var src = o.src+'&m='+Math.random();
// 	o.src = src;
// 	sessionStorage.code_time = new Date().getTime();
// }










// ########################################
// ########################################
// ########################################
// ########################################
// ########################################
// ########################################
// ########################################
// ########################################
// ########################################
// ########################################
// ########################################
// ########################################
// ########################################
// ########################################














// /*
// 	### 跳转到错误页
// 	参一：string  页面url附带错误代号
// 	示例：
// 		JumpError('../error.html?t=400012');	//400012 获取状态集合失败
// */
// function JumpError(url){
// 	location.replace(url);
// 	exit;
// }




// /*
// 	### 检测状态集合中指定字段是否过期
// 	参一：object    状态集合对象
// 	参二：string    要检测的字段名
// 	参三：int       本地缓存的过期时间
// 	return：        未过期返回ok,过期返回err
// 	示例：
// 		StatusSetObj = JSON.parse(StatusSet);
// 		var CheckName = 'city_open';
// 		var le = localStorage.OpenCityExpire;
// 		var res = CheckStatusIsExpire(StatusSetObj,CheckName,le);
// 		if(res == 'err'){
// 			localStorage.OpenCity = '';
// 		}
// 		CityInit(OpenCityObj,Province,City,County,function(){},12342349);
// */
// function CheckStatusIsExpire(StatusSetObj,CheckName,LocalExpire){
// 	var OpenCityStatus = GetStatusSetField(StatusSetObj,CheckName); //获取状态集合中指定字段
// 	//对比状态字段时间与本地缓存时间，按需清除
// 	if((OpenCityStatus && !LocalExpire) || (OpenCityStatus && LocalExpire && parseInt(OpenCityStatus)*1000) > parseInt(LocalExpire)){
// 		return 'err';
// 	}
// 	return 'ok';
// 	function GetStatusSetField(StatusSetObj,CheckName){
// 		var val = '';
// 		for(var i in StatusSetObj){
// 			if(i == CheckName){
// 				val = StatusSetObj[i];
// 				break;
// 			}
// 		}
// 		return val;
// 	}
// }



// /*
// 	### 从localStorage，upyun获取状态集合，并定期更新
// 	参一：回调  成功返回数据，失败返回 err
// */
// function GetStatusSet(fun){
// 	if(localStorage.StatusSetExpire && parseInt(localStorage.StatusSetExpire) > new Date().getTime() - 3000){
// 		C('StatusSet_localStorage');
// 		if(fun){
// 			fun(localStorage.StatusSet);
// 		}
// 	}else{
// 		var StatusSetUrl = upyun_shop_cache + '/Status/StatusSet.html';
// 		UrlIsActive(StatusSetUrl,function(s){
// 			if(s){
// 				CorsQuery(StatusSetUrl,'',function(res){
// 					if(res && res != 'err'){
// 						C('StatusSet_Upyun');
// 						localStorage.StatusSet = JSON.stringify(res);
// 						localStorage.StatusSetExpire = new Date().getTime();
// 						if(fun){
// 							fun(localStorage.StatusSet);
// 						}
// 					}else{
// 						if(fun){
// 							fun('err');	//获取状态集合失败
// 						}
						
// 					}
// 				});
// 			}else{
// 				if(fun){
// 					fun('err');	//获取状态集合失败
// 				}
				
// 			}
// 		});
// 	}
// }







// /*
// 	### 从localStorage，upyun获取商品分类列表
// 	参一：回调，成功返回数据，失败返回 err
// */
// function GetGoodsType(fun){
// 	if(localStorage.GoodsType && /^\[{"id":.*}\]$/.test(localStorage.GoodsType)){
// 		C('GoodsType_localStorage');
// 		fun(localStorage.GoodsType);
// 	}else{
// 		var GoodsTypeUrl = upyun_shop_cache + '/GoodsType/goods_type_list.html';
// 		UrlIsActive(GoodsTypeUrl,function(s){
// 			if(s){
// 				CorsQuery(GoodsTypeUrl,'',function(res){
// 					if(res && res != 'err'){
// 						C('GoodsType_Upyun');
// 						var res2 = JSON.stringify(res);
// 						if(/^\[{"id":.*$/.test(res2)){
// 							localStorage.GoodsType = res2;
// 							localStorage.GoodsTypeExpire = new Date().getTime();
// 							if(fun){
// 								fun(localStorage.GoodsType);
// 							}
// 						}else{
// 							if(fun){
// 								fun('err'); //获取状态集合失败
// 							}
// 						}
// 					}else{
// 						if(fun){
// 							fun('err');	//获取状态集合失败
// 						}
// 					}
// 				},2000);
// 			}else{
// 				if(fun){
// 					fun('err'); //获取状态集合失败
// 				}
// 			}
// 		});
// 	}
// }



// /*
// 	### 将商品分类数据解析填充到元素
// 	参一：string    商品数据的json字串
// 	参二：string	一级商品分类select 元素id名
// 	参三：stirng	二级商品分类select 元素id名
// 	参四：stirng	三级商品分类select 元素id名
// */
// function GoodsTypeInit(GoodsTypeStr,st1,st2,st3){
// 	var t1 = new Array();
// 	var t2 = new Array();
// 	var t3 = new Array();
// 	if(!/^\[{"id":.*$/.test(GoodsTypeStr)){
// 		C('数据异常！');
// 		return;
// 	}
// 	GCA_ParseData(GoodsTypeStr,function(){ 	//解析合成商品分类数据到一个变量中
// 		$(st1).change(function(){
// 			GCA_ParseData_Type2();
// 		});
// 		$(st2).change(function(){
// 			GCA_ParseData_Type3();
// 		});

// 	});


// 	//获取商品列表数据
// 	function GCA_GetGoodTypes(fun){
// 		Ajax2({type:'GetGoodTypes'},function(res){
// 			fun(res);
// 		},after_url);
// 	}

// 	//分解数据并填充到三个下拉框中
// 	function GCA_ParseData(res,fun){
// 		var data = JSON.parse(res);
// 		for(var i=0;i<data.length;i++){
// 			if(data[i].name == '全部'){
// 				continue;
// 			}
// 			if(data[i].level == 1){
// 				t1.push(data[i]);
// 			}
// 			if(data[i].level == 2){
// 				t2.push(data[i]);
// 			}
// 			if(data[i].level == 3){
// 				t3.push(data[i]);
// 			}
// 		}

// 		GCA_ParseData_Type1();	//解析一级目录
// 		fun();
// 	}


// 	//解析一级目录
// 	function GCA_ParseData_Type1(){
// 		var t1_str = '';
// 		for(var i=0;i<t1.length;i++){
// 			t1_str += "<option value='"+t1[i].id+"'>"+t1[i].name+"</option>";
// 		}
// 		$(st1).html(t1_str);

// 		GCA_ParseData_Type2();
// 	}

// 	//解析二级目录
// 	function GCA_ParseData_Type2(){
// 		var t1_id = $(st1).find('option:selected').val();
// 		var t2_str = '';
// 		for(var i=0;i<t2.length;i++){
// 			if(t1_id == t2[i].parent_id){
// 				t2_str += "<option value='"+t2[i].id+"'>"+t2[i].name+"</option>";
// 			}
// 		}
// 		$(st2).html(t2_str);

// 		GCA_ParseData_Type3();
// 	}

// 	//解析三级目录
// 	function GCA_ParseData_Type3(){
// 		var t2_id = $(st2).find('option:selected').val();
// 		var t3_str = '';
// 		for(var i=0;i<t3.length;i++){
// 			if(t2_id == t3[i].parent_id){
// 				t3_str += "<option value='"+t3[i].id+"'>"+t3[i].name+"</option>";
// 			}
// 		}
// 		$(st3).html(t3_str);
// 	}
// }





// /*
// 	### 获取已开通城市信息并填充到元素
// 	参一：object 保存城市数据的容器
// 	参二：string 省元素id名
// 	参三：string 市元素id名
// 	参四：string 县元素id名
// 	参五：function 回调
// 	示例：
// 		CityInit(OpenCityObj,Login_Province,Login_City,Login_County);
// */
// function CityInit(OpenCityObj,Login_Province,Login_City,Login_County,fun){
// 	if(localStorage.OpenCity){
// 		C('OpenCity_LocalStorage');
// 		OpenCityObj = JSON.parse(localStorage.OpenCity);
// 		FillCityInfo(OpenCityObj,Login_Province,Login_City,Login_County,fun);
// 	}else{
// 		var OpenCityUrl = upyun_shop_cache + '/CityInfo/city_open.html';
// 		UrlIsActive(OpenCityUrl,function(s){
// 			if(s){
// 				CorsQuery(OpenCityUrl,"Gets",function(res){
// 					C(res);
// 					C('OpenCity_Upyun');
// 					OpenCityObj = res;
// 					if(!OpenCityObj.county){
// 						C('获取已开通城市信息失败');
// 						//JumpError('../error.html?t=400011'); //400011 获取已开通城市信息失败
// 						exit;
// 					}
// 					localStorage.OpenCity = JSON.stringify(res);
// 					localStorage.OpenCityExpire = new Date().getTime();
// 					FillCityInfo(OpenCityObj,Login_Province,Login_City,Login_County,fun);
// 				},2000);
// 			}else{
// 				//获取已开通城市信息失败
// 				C('获取已开通城市信息失败');
// 				//location.replace('../error.html?t=400011');	
// 			}
// 		});
// 	}
// }


// /*
// 	### 填充城市数据到元素
// 	参一：object 城市数据对象
// 	参二：string 省元素id名
// 	参三：string 市元素id名
// 	参四：string 县元素id名
// 	参五：function 回调
// */
// function FillCityInfo(CityInfo,ele_province,ele_city,ele_county,fun){
// 	ele_county.innerHTML = '';
// 	ele_province.innerHTML='';
// 	ele_city.innerHTML = '';
// 	var Province_Arr = CityInfo.province;
// 	var City_Arr = CityInfo.city;
// 	var County_Arr = CityInfo.county;	//用来装载省市县分类后的城市数据

// 	PushProvince();

//  	//填充省数据
// 	function PushProvince(){
// 		ele_province.innerHTML = ''
// 		var Province_Str = '';
// 		for(var i=0;i<Province_Arr.length;i++){
// 			Province_Str += "<option value="+Province_Arr[i].id+">"+Province_Arr[i].name+"</option>";
// 		}
// 		ele_province.innerHTML=Province_Str;
// 		PushCity();		//直充市数据
// 	}
// 	//填充市数据
// 	function PushCity(){
// 		ele_city.innerHTML = '';
// 		var Province_Id = ele_province.options[ele_province.selectedIndex].value;
// 		var City_Str = '';
// 		for(var i=0;i<City_Arr.length;i++){
// 			if(City_Arr[i].parent_id == Province_Id){
// 				City_Str += "<option value="+City_Arr[i].id+">"+City_Arr[i].name+"</option>";
// 			}
// 		}
// 		ele_city.innerHTML = City_Str;
// 		PushCounty();	//填充县数据
// 	}
// 	//填充县数据
// 	function PushCounty(){
// 		ele_county.innerHTML = '';
// 		var City_Id = ele_city.options[ele_city.selectedIndex].value;
// 		var County_Str = '';
// 		for(var i=0;i<County_Arr.length;i++){
// 			if(County_Arr[i].parent_id == City_Id){
// 				County_Str += "<option value="+County_Arr[i].code+","+County_Arr[i].db_host+","+County_Arr[i].db_name+">"+County_Arr[i].name+"</option>";
// 			}
// 		}
// 		ele_county.innerHTML = County_Str;
// 		if(fun){
// 			fun();
// 		}
// 	}
// 	//省的切换事件
// 	ele_province.onchange = function(){
// 		PushCity(); 	//直充市数据
// 	}
// 	//市的切换事件
// 	ele_city.onchange = function(){
// 		PushCounty(); 	//直充市数据
// 	}
// 	//县的切换
// 	ele_county.onchange = function(){
// 		if(fun){
// 			fun();
// 		}
// 	}
// }











// /*
// 	### 附带token的 jquery异步加载
// 	参一：对象方式的请求数据 
// 	参二：回调
// 	参三：请求地址
// 	参四：是否异步.默认无值为异步，有值时为同步
// 	参五：提交方式 默认均值为post，有值为get
// 	示例：
// 		var data = {
// 			type:'GetServerAddrList',
// 		}
// 		Ajax2(data,function(res){
// 			C(res);
// 		},'store_interface.php');
// */
// function Ajax2(data,fun,url,async,method){
// 	GetToken(data.type,url,function(t){
// 		data.token = t;
// 		data.token_name = data.type;
// 		Ajax(data,function(res){
// 			fun(res);
// 		},url,async,method);
// 	});
// }
// function GetToken(token_name,url,fun){
// 	var data = {
// 		type:'token',
// 		token_name:token_name
// 	}
// 	Ajax(data,function(t){
// 		fun(t);
// 	},url,1,1);
// }





// /*
// 	### 附带token的 JS异步加载 (该方式只支持POST异步请求，可上传文件)
// 	参一：formData数据对象
// 	参二：请求地址
// 	参三：回调
// 	示例：
// 		Ajax_FormData2(formData,after_url,function(res){
// 			C(res);
// 		});
// */
// function Ajax_FormData2(formData,after_url,fun){
// 	GetToken_Js(formData,after_url,function(t){
// 		formData.append('token',t); 
// 		Ajax_FormData(formData,after_url,function(res){
// 			fun(res);return;
// 		},false,true);
// 	});
// }

// function GetToken_Js(formData,after_url,fun){
// 	var f_tk = new FormData();
// 	f_tk.append('type','token');
// 	f_tk.append('token_name',formData.get('type'));
// 	Ajax_FormData(f_tk,after_url,function(t){
// 		fun(t);
// 	},false,true);
// }















































// //==== 公共函数区



// //检测是否为微信浏览器
// function IsWxWeb(){
// 	if(navigator.userAgent.match('(micromessenger)|(MicroMessenger)')){
// 		return true;
// 	}else{
// 		return false;
// 	}
// }





// /*
// 	### JS版获取微信openid
// 	return  返回微信用户的openid 或跳转到错误页
// 	示例：
// 		var openid = JsGetOpenid();
// */
// function JsGetOpenid(){
// 	//是微信浏览器，则获取微信openid
// 	if(navigator.userAgent.match('(micromessenger)|(MicroMessenger)')){
// 		var back_uri = encodeURIComponent(document.URL);	//获取当前页面url
// 		if(GetUrlParm('get_openid_res')){
// 			var res = GetUrlParm('get_openid_res');
// 			if(res && /^{.*}$/.test(res)){
// 				var res2 = JSON.parse(decodeURIComponent(res));
// 				return res2.openid;	//获取到openid
// 			}else{
// 				location.replace('error.html');	//不是微信浏览器跳转到错误页
// 			}
// 		}else{
// 			//跳转到腾讯接口
// 			location.href='http://tools.bm123.top/wx_login/wx_js.php?get_openid_back_uri='+back_uri+'&t=t';
// 		}
// 	}else{
// 		location.replace('error.html?t=2');	//不是微信浏览器跳转到错误页
// 	}
// }









// /*
// 	### 跨域请求
// 	参一：string 	请求url
// 	参二：string 	回调函数名
// 	参三：function 	成功返回数据，失败返回 err
// 	参四：int 		超时，默认500毫秒
// 	示例：
// 		var url = 'http://www.t2.top/domain.php';
// 		CorsQuery(url,"JumpDomain",function(res){
// 			console.log(res);
// 		},2000);

// 		domain.php页面
// 		JumpDomain('http://www.t2.top/domain.html')
// */
// function CorsQuery(url,CallBackName,fun,time){
// 	if(!CallBackName){
// 		var CallBackName = 'Gets';
// 	}
// 	var stat = false;
// 	$.ajax({
// 	  url:url,
// 	  dataType:"jsonp",
// 	  jsonpCallback:CallBackName, //指定异域使用的函数名为aabbcc
// 	  success:function(res){
// 	  	stat = true;
// 	  	fun(res);
// 	  }
// 	});
// 	var time = parseInt(time) > 0?parseInt(time):500;
// 	setTimeout(function(){
// 		if(!stat){
// 			fun('err');
// 		}
// 	},time);
// }



// /*
// 	### 处理跨域请求返回数据(去除头尾，返回json字串)
// */
// function CorsBackTrim(res){
// 	var start = res.indexOf('(')+1;
// 	var end = res.lastIndexOf(')');
// 	return res.substring(start,end);
// }





	
// /*
// 	### 判断远程url是否可用
// 	参一：请求的url
// 	参二：回调
// 	参三：超时，默认1000毫秒
// 	示例：
// 		UrlIsActive(url,function(s){
// 			C(s);
// 		});
// */
// function UrlIsActive(url,fun,timeout){
// 	if(!timeout){
// 		var timeout = 1000;
// 	}
// 	var ping_stat = false;
// 	if(window.XMLHttpRequest){
// 	  var ajax=new XMLHttpRequest();
// 	}else{
// 	  var ajax=new ActiveXObject("Microsoft.XMLHTTP");
// 	}
// 	ajax.open('GET',url,1);
// 	ajax.send();
// 	ajax.onreadystatechange = function(){
// 		if(ajax.readyState == 4 && ajax.status == 200){
// 			ping_stat = true;
// 			fun(ping_stat);
// 		}
// 	}
// 	setTimeout(function(){
// 		if(!ping_stat){
// 			fun(ping_stat);
// 		}
// 	},timeout);
// }




























// /*
// 	### 获取当前cookie中指定字段的值
// 	### 参一：想要获取的字段名 如：uid
// 	### return: 成功：反回对应字段的cookie值，失败返回 err
// 	### 示例：
// 		当前页面cookie : a=aaa; b=bbb; c=ccc
// 		var key='b';
// 		alert(GetCookie(key));	//结果： bbb
// */
// function GetCookie(key){
// 	//var p = '/'+key+'=([^;]*)?/';
// 	var p = '/^'+key+'=([^;]*)?| '+key+'=([^;]*)?/';
// 	if(res = document.cookie.match(eval(p))){
// 		//return res[1];
// 		if(res[1]){
// 			return res[1];
// 		}else{
// 			return res[2];
// 		}
// 	}else{
// 		return false;
// 	}
// }






// /*
// 	### 获取GET附带参数
// 	参一：key (string) GET传参的参名
// 	return 	成功返回参名对应的值，失败返回false
// */
// function GetUrlParm(key){
// 	var p = '/'+key+'=([^&]*)/';
// 	if(res = document.URL.match(eval(p))){
// 		if(res[1]){
// 			return res[1];
// 		}else{
// 			return false;
// 		}
// 	}else{
// 		return false;
// 	}
// }
















	






	















// /*
// 	### 表单选择并读取文件，如是图片并显示
// 	参一：文件选择表单项的id
// 	参二：要显示图片的元素id,如果为空则不显示图片
// 	参三：回调(返回file或'err')
// 	示例：
// 		<input type='file' id='a' />
// 		<img src='' id='b' />
// 		SelectOrViewImg('a','b',function(f){
// 			alert(f);
// 		});
// */
// function SelectOrViewImg(file_input_id,view_id,fun){
// 	var StoreMain_File = document.getElementById(file_input_id);
// 	var view_ele = document.getElementById(view_id);
// 	StoreMain_File.onchange=function(){
// 		var file = StoreMain_File.files[0];
// 		var reader = new FileReader();
// 		reader.onloadend = function(){
// 			if(view_id){	//如果指定了图片显示元素，则显示图片
// 				view_ele.src = reader.result;
// 			}
// 		}
// 		if(file){
// 			reader.readAsDataURL(file);
// 			fun(file);
// 		}else{
// 			fun('err');
// 		}
// 	};
// }























// /*
// 	###   ajax 异步加载 (JS方式)
// 	参一：formData(object)  FormData格式数据
// 	参二：url(string)       请求的地址
// 	参三：fun(function) 	回调函数
// 	参四：sync(bool)        是否同步(默认false为异步，true为同步)
// 	参五：type(bool)		请求方式(默认false为GET,true为POST) 注：GET方式传输数据需要在url中传递，不可使用formData
// 	示例：
// 		var formData = new FormData();
// 		formData.append('file','aaaaa');
// 		Ajax_FormData(formData,'a.php',function(res){
// 			alert(res);
// 			if(/aaa/.test(res)){
// 				alert(1);
// 			}else{
// 				alert(2);
// 			}
// 		},true,1);
// */
// function Ajax_FormData(formData,url,fun,sync,type){
// 	if(!sync){
// 		var sync = true;	//true为异步,false 为同步
// 	}else{
// 		var sync = false;
// 	}
// 	if(!type){
// 		var type = 'GET';	//默认为GET方式
// 	}else{
// 		var type = 'POST';
// 	}
// 	if(window.XMLHttpRequest){
// 	  var ajax=new XMLHttpRequest();
// 	}else{
// 	  var ajax=new ActiveXObject("Microsoft.XMLHTTP");
// 	}
// 	ajax.open(type,url,sync);  
// 	if(!formData){
// 		ajax.send();
// 	}else{
// 		ajax.send(formData);
// 	}
// 	if(sync){
// 		ajax.onreadystatechange=function(){ //监听状态
// 			if(ajax.readyState==4 && ajax.status == 200){
// 				fun(ajax.responseText);
// 			}
// 		}
// 	}else{
// 		fun(ajax.response);
// 	}
// }













// /*
// 	###   ajax 异步加载 (JQUERY方式)
// 	参一：要传送的数据
// 	参二：成功回调
// 	参三：请求的后台地址
// 	参四：是否异步.当无值时默认为异步，当有值时为同步
// 	参五：提交方式 默认为post,有值为get
// 	示例：
// 		var data = {
// 					token:t,
// 					type:type,
// 					openid:openid
// 				};

// 		 Ajax(data,function(res){
// 		 	alert(res);
// 		 });
// 		 或
// 		 },1);
// */
// function Ajax(data,fun,url,async,stat){
// 	if(!stat){
// 		stat = 'post';
// 	}else{
// 		stat = 'get';
// 	}
// 	async = async?false:true;
// 	if(!url){
// 		url = 'interface.php';
// 	}
// 	$.ajax({
// 		url:url,
// 		type:stat,
// 		async:async,
// 		data:data,
// 		success(rq_res,rq_stat,rq_xhr){
// 			fun(rq_res,rq_stat,rq_xhr);
// 		},
// 		error(){
// 			fun('false');
// 		}
// 	});
// }









// /*
// 	### 获取数据 (sess -> cache -> after)
// 	参一：data  object      后参请求参数 ,注：data.method 是区分请求类型的。默认无值为post,有值为get
// 	参二：fun   function    回调函数
// 	参三：after_url  string      后台请求地址
// 	参四：SessName   string      sess缓存名，必须 local_ 或 sess_ 开头，代表两种缓存方式。空为不设置sess缓存
// 	参五：cache string      静态缓存地址，以http://开头为跨域缓存地址。空为不设置静态缓存
// 	参六：cache_expire  int       跨域请求时的最大超时。默认2000 为2秒
// 	参七：cache_callback    string      跨域回调名,默认空为：Gets
// 	示例：

// 		//localStorage.local_a1 = '';
// 		//sessionStorage.sess_a1 = '';	//黑窑sess缓存，以便从静态或后台获取数据

// 		var data = {'type':'test'};	//后台请求附带的对象数据

// 		var after_url = '';
// 		var after_url = 'interface.php';	//后台请求地址

// 		var cache = '';			// 不使用静态缓存
// 		var cache = 'test2.html'; //本地
// 		var cache = 'http://shop-cache-upyun.bm123.top/test/test22.html'; //跨域

// 		var cache_expire =1000;	//跨域超时为5秒

// 		var SessName = 'local_a1';	
// 		var SessName = ""; 				//不使用sess
// 		var SessName = 'sess_a1';

// 		Notice('请稍候...');
// 		sca(data,function(res){
// 			C(res);
// 			Notice();
// 		},after_url,SessName,cache,cache_expire);
// */
// function sca(data,fun,after_url,SessName,cache,cache_expire,cache_callback){
// 	cache_expire = cache_expire?cache_expire:2000;
// 	cache_callback = cache_callback?cache_callback:'Gets';
// 	var res = false;
// 	if(!after_url && !SessName && !cache){
// 		fun(res);
// 		return;
// 	}
	
// 	if(SessName){
// 		if(/^sess_.*$/.test(SessName)){ 	//使用sessionStore
// 			var s_type = 'sess';
// 			var s_name = 'sessionStorage.'+SessName;
// 		}else{								//使用localStore
// 			var s_type = 'local';
// 			var s_name = 'localStorage.'+SessName;
// 		}
// 		var s_name_save = s_name + '= res2;'
// 		C(data.type+'_'+s_type);
// 		if(eval(s_name)){
// 			res = eval(s_name);
// 		}
// 	}

// 	if(res != false){
// 		fun(res);
// 		return;
// 	}
// 	if(cache && after_url){
// 		if(/^http:.*$/.test(cache)){	//跨域请求缓存
// 			//C(cache_callback);return;
// 			CorsQuery(cache,cache_callback,function(res2){
// 				C(data.type+'_cache_cors');
// 				if(res2 != 'err'){
// 					res2 = JSON.stringify(res2);
// 					if(SessName){
// 						eval(s_name_save);
// 					}
// 					fun(res2);
// 				}else{
// 					sca2();
// 				}
// 			},cache_expire);
// 		}else{							//本地请求缓存
// 			Ajax({},function(res2){
// 				C(data.type+'_cache');
// 				if(res2 != 'false'){
// 					if(SessName ){
// 						eval(s_name_save);
// 					}
// 					res = res2;
// 					fun(res);
// 				}else{
// 					sca2();
// 				}
// 			},cache,1,1);
// 		}
// 	}else if(cache){
// 		if(/^http:.*$/.test(cache)){	//跨域请求缓存
// 			CorsQuery(cache,cache_callback,function(res2){
// 				C(data.type+'_cache_cors');
// 				if(res2 != 'err'){
// 					res2 = JSON.stringify(res2);
// 					if(SessName){
// 						eval(s_name_save);
// 					}
// 				}
// 				fun(res2);
// 			},cache_expire);
// 		}else{							//本地请求缓存
// 			Ajax({},function(res2){
// 				C(data.type+'_cache');
// 				if(res2 != 'false'){
// 					if(SessName ){
// 						eval(s_name_save);
// 					}
// 					res = res2;
// 				}
// 				fun(res);
// 			},cache,1,1);
// 		}
// 	}else if(after_url){
// 		sca2();
// 	}
	
// 	function sca2(){
// 		var method = data.method?1:0;
// 		Ajax2(data,function(res2){
// 			C(data.type+'_after');
// 			if(SessName){
// 				eval(s_name_save);
// 			}
// 			fun(res2);
// 		},after_url,1,method);	
// 	}
// }


























// /*
// 	### 页面图片懒加载(页面滚动触发式，适用图片较多的页面)
// 	    无参，无返回值
// 	示例：
// 		Img_Later_View(300); //直接调用函数即可	
// */
// function Img_Later_View2(height){
//   height = height?parseInt(height):150;
//   //将所有图片元素存入临时变量中
//   var DocumentImgList = document.images;

//   Document_View_Img();
  
//   //滚动事件触发判断加载图片函数
//   $(document).scroll(function(){
//   	if(DocumentImgList.length > 0){
//   		Document_View_Img();
//   	}
//   });
  
//   //判断加载图片函数
//   function Document_View_Img(){
//   	for(var i=0;i<DocumentImgList.length;i++){
//   	  var eh = DocumentImgList[i].getBoundingClientRect().top;
// 	  //获取每个元素与可视区域顶部距离
//   	  var ch = parseInt(document.body.clientHeight) + height;
// 	  //获取可视区域高度并额外加上一些高度
//   	  if(eh < ch){	//判断元素暴露在可视区中即加载
//   	  	$(DocumentImgList[i]).attr('src',$(DocumentImgList[i]).attr('srcs'));
//   	  	delete DocumentImgList[i];
//   	  }
//   	}
//   }
// }
























